Certain applications require a truly random number to be generated within an integrated system. Such applications are identification, access control, remote locks, encryption and audio (to generate noise). Typically, the random function is often approximated utilizing some type of algorithm that generates a long, fixed sequence of numbers, in a way that appears reasonably random. This algorithm can be implemented in hardware, one conventional method being to utilize a linear feed-back shift register, in which the binary output of some stages is combined with the input of other stages through EXOR gates and then fed back to the input. This algorithm can also be implemented in software, i.e., the same function can be accomplished through the use of a program that runs on. Since the sequence is not really random, but deterministic, this technique is often referred to as a pseudo-random number generator.
Another conventional technique for generating a random number is to time the duration of an external event, which is assumed to be uncorrelated to the clock frequency utilized by the system. A simple example of this technique is to time the duration of a key-press by a human user, utilizing the master clock of the microprocessor. Although the resulting number is actually deterministic, it does not appear as such due to the fact that the human user cannot normally press the key for the same duration each time. Although this technique may be sufficient in the field, it cannot easily be utilized to program a random number into an integrated circuit at the factory. An automated tester emulates the signal normally coming from a key-board.
One difficulty in generating a random number is the fact that an integrated circuit, whether analog or digital, is essentially designed to be deterministic in nature; for a given set of inputs, there will be a given set of outputs. However, one parameter of integrated circuits that is truly random is the thermal noise. Since the thermal noise constitutes a relatively small signal, it must be amplified to be utilized as a random noise source. However, this presents some difficulty in that any on-chip amplifier is subject to interference from other portions of the circuit, i.e., interference through the power supply or the substrate. This interference, as compared to the thermal noise, is not random. It is primarily determined by what other parts of the circuits do. It can either be periodic, if it is generated from a clock circuit, or it can be data dependent, if it is generated from data processing circuitry.
One technique for utilizing random noise is related to remote keyless entry integrated circuits. This technique utilizes two high-impedance voltage dividers to provide effective noise voltages in the tens of micro-volts, the output of which is amplified by a number of fully-differential, AC-couple, switched-capacitor gain stages. This provides an overall gain of approximately 1,000. The outputs of these gain stages are compared to each other utilizing a sensitive comparator. The output of the comparator alternates between a logic "1" and a logic "0" in a random fashion. In order to obtain an N-bit binary random number, the comparator output is sampled n times by the microprocessor (one bit for each sample). However, one disadvantage to this technique is that the entire random number generator is too large to be utilized effectively and also has an output that varies from a logic "1" to a logic "0" as a function of the random number generator. There is a possibility that there will be a locking between the random number generator oscillator frequency and that of the clock utilized for the sampling operation. This is due to the fact that the comparator and microprocessor are operated off of the same power supply.